/*
 * ArchivoTextoYBuffer.h
 *
 *  Created on: 01/11/2009
 *      Author: hernan
 */

#ifndef ARCHIVOTEXTOYBUFFER_H_
#define ARCHIVOTEXTOYBUFFER_H_

#include "Almacenamiento.h"

#include <fstream>
#include <iostream>
#include "../Externa/Dato.h"
#include "../Externa/Clave.h"
#include <list>
#include "ArchivoTexto.h"
#include "Buffer.h"


class ArchivoTextoYBuffer: public Almacenamiento {

	ArchivoTexto *archivo;

	Buffer *buffer;


public:
	ArchivoTextoYBuffer();
	ArchivoTextoYBuffer(const std::string& path);
	virtual ~ArchivoTextoYBuffer();

	/**
	 * Metodo que salva en buffer y disco y devuelve en que lugar del Archivo de Texto
	 * se guardo la informacion
	 */
	private: virtual int saveData(string& data, int posicion);

	/**
	 * Metodo que borra del archivo de Texto y del buffer el dato alojado en la posicion
	 * indicada por el parametro position
	 */
	private: virtual void deleteData(int position);


	/**
	 * Metodo que actualiza los datos alojados en la posicion pasada por parametro
	 * con los datos del parametro data. Actualiza el buffer.
	 */
	private: virtual void updateData(int position,string& data);


	/**
	 * Metodo que, previamente consultando al indice sobre un dato y devolviendo este una posicion al archivo * buffer, devuelve
	 * el dato en cuestion.
	 */
	private: virtual string getData(int position);

	/**
	 * Metodo que vacia el buffer (liberando memoria) y el archivo (abriendolo para escritura borrando todo contenido anterior)
	 *
	 */
	private: virtual void clean();





};

#endif /* ARCHIVOTEXTOYBUFFER_H_ */
